package com.simple.behavior.superclassandsubclass.templatemethod;

/**
 * 可以用来提供辅助类的函数
 *
 * @author simple
 * @version 1.0
 * @date 2019-01-04 16:26
 * @since 1.0
 */
public abstract class AbstractCalculator {
    /**
     * 主方法, 对本类其他方法的调用
     *
     * @param exp 需要执行的表达式
     * @param opt 操作符
     * @return 结果
     */
    public final int calculate(String exp, String opt) {
        int[] arrayInt = split(exp, opt);
        return calculate(arrayInt[0], arrayInt[1]);
    }

    /**
     * 需要子类重写的方法
     *
     * @param num1 操作数1
     * @param num2 操作数2
     * @return 结果
     */
    protected abstract int calculate(int num1, int num2);

    private int[] split(String exp, String opt) {
        String[] split = exp.split(opt);
        int[] arrayInt = new int[2];
        arrayInt[0] = Integer.parseInt(split[0]);
        arrayInt[1] = Integer.parseInt(split[1]);
        return arrayInt;
    }
}
